package main

import (
	"demo_grpc/service"
	"flag"
	"fmt"
	"log"
	"net"

	// 导入grpc包
	"google.golang.org/grpc"
	// 导入刚才我们生成的代码所在的proto包。
	pb "demo_grpc/proto"
)

var (
	port = flag.Int("port", 50051, "The server port")
)

func main() {
	lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port))
	if err != nil {
		log.Fatalf("failed to listen: %v", err)
	}

	// 实例化grpc服务端
	s := grpc.NewServer()
	// 在gRPC服务器注册我们的服务 常用请求形式
	pb.RegisterGreeterServer(s, &service.Server{})
	pb.RegisterUserInfoServer(s, &service.User{})

	// 服务端流式请求
	pb.RegisterServiceStreamServerServer(s, &service.Stocks{})

	// 客户端流式请求
	pb.RegisterClientStreamClientServer(s, &service.ClientSimpleService{})

	// 双向流请求
	pb.RegisterDoubleStreamServer(s, &service.DoubleStreamService{})

	log.Printf("server listening at %v", lis.Addr())
	// 启动grpc服务
	err = s.Serve(lis)
	if err != nil {
		log.Fatalf("启动失败: %v", err)
	}
}
